﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace WTwitter.Model.Framework {
	public enum TimelineReadResult {
		/// <summary>
		/// 新しいアイテムの取得
		/// </summary>
		ReadNewItems,

		/// <summary>
		/// アクセスに成功したが新しいアイテムがなかった
		/// </summary>
		NoNewItems,

		/// <summary>
		/// サーバーやネットワークのエラーなど、（ある程度予期できる）エラーの発生
		/// </summary>
		WebErrorOccurred,

		/// <summary>
		/// 上記以外のエラー発生
		/// </summary>
		UnexpectedErrorOccurred
	}

	/// <summary>
	/// タイムラインにアクセスした結果
	/// </summary>
	sealed public class ReadTimelineEventArgs : EventArgs {
		/// <summary>
		/// 取得に成功した場合のコンストラクタ
		/// </summary>
		/// <param name="newItems"></param>
		public ReadTimelineEventArgs(List<ITimelineItem> newItems) {
			if (newItems.Count > 0) {
				ResultType = TimelineReadResult.ReadNewItems;
			} else {
				ResultType = TimelineReadResult.NoNewItems;
			}
			NewItems = newItems;
		}

		/// <summary>
		/// 例外が発生した場合のコンストラクタ
		/// </summary>
		/// <param name="e">読み込み時に発生した例外（をそのまま渡す）</param>
		public ReadTimelineEventArgs(Exception e) {
			if (e is WebException) {
				ResultType = TimelineReadResult.WebErrorOccurred;
			} else {
				ResultType = TimelineReadResult.UnexpectedErrorOccurred;
			}
			Error = e;
		}

		public TimelineReadResult ResultType { private set; get; }

		/// <summary>
		/// 
		/// 例外が発生した場合はnull
		/// </summary>
		public List<ITimelineItem> NewItems { private set; get; }

		/// <summary>
		/// 
		/// </summary>
		public Exception Error { private set; get; }
	}
}
